from tkinter import *
import tkinter
import tkinter.filedialog
import tkinter.messagebox
from aip import AipFace
import json
"""选择要提交的图片并返回图片的二进制信息"""
def select_image():
    global image
    path = tkinter.filedialog.askopenfilename()
    path_label = Label(text=path)
    path_label.grid(row=0,column=1)
    with open(path, 'rb') as fp:
        image=[]
        image.append(fp.read())
"""获取用户输入创建百度云接口实例并提交信息"""    
def updatauser():
    global image  #全局化image
    if image != []:  #只有image里面有内容，即用户选择了图片才会执行
        with open('LoginInfo.txt', 'r') as fp:  #打开LoginInfo.txt
            info = json.loads(fp.read())  #登录信息转换成JSON数据
        client = AipFace(info['appid'], info['apikey'], info['secretkey'])  #根据登录信息创建百度云实例
        options = {}
        options["action_type"] = "replace"  #注册新用户的额外选项，replace的意思估计是更新，我没查
        return_info = client.addUser(userid_entry.get(), userinfo_entry.get(),\
                                     groupid_entry.get(), image[0], options)  #注册/更新新用户
        if 'error_code' in return_info.keys():  #判断返回数据是否包含更新失败关键字
            tkinter.messagebox.showerror('参数输入错误', '注意：Userid不能包含中文字符！')
        else:  #更新成功
            tkinter.messagebox.showinfo('成功', '新用户信息提交成功！')
    else:  #image里面没有有内容
        tkinter.messagebox.showerror('选择文件错误', '请重新选择图片')
    
image = []
#以下为tkinter内容，在这不做介绍
root = Tk()
root.title('百度人脸注册工具')
try:
    root.iconbitmap('ico/baidu.ico')#linux平台没有这个方法
except:
    pass
button = Button(text='选择图片',command = select_image)
button.grid(row=0,column=0,padx=2,pady=2)
userid_label = Label(text='Userid:')
userid_label.grid(row=1,column=0,padx=2,pady=2)
userid_entry = Entry(width=40)
userid_entry.grid(row=1,column=1,padx=2,pady=2)
userinfo_label = Label(text='Userinfo:')
userinfo_label.grid(row=2,column=0,padx=2,pady=2)
userinfo_entry = Entry(width=40)
userinfo_entry.grid(row=2,column=1,padx=2,pady=2)
groupid_label = Label(text='Groupid :')
groupid_label.grid(row=3,column=0,padx=2,pady=2)
e = StringVar()  #Entry默认输入编程方式
groupid_entry = Entry(textvariable=e, width=40)
groupid_entry.grid(row=3,column=1,padx=2,pady=2)
e.set('group1')  #Entry默认输入编程方式
updata = Button(text='提交用户',command = updatauser)
updata.grid(row=7,column=1,sticky=tkinter.E,padx=2,pady=2)
root.mainloop()
